#pragma once
#include "Utils.hpp"
#include "Player.hpp"
#include "Monsters.hpp"

namespace MonsterFactory {

  class CombatManager {
  private:
    CombatManager(){}
    CombatManager(const CombatManager&) {};
    CombatManager& operator=(const CombatManager&) {}

    static CombatManager* instance;

    class Garbo
    {
    public:
      ~Garbo()
      {
	if(CombatManager::instance != NULL  )
	  {
	    delete CombatManager::instance;
	    CombatManager::instance = NULL;
	  }
      }
    };
    static Garbo garbo;

    void Fight(Player* player, IMonster* monster);    
    
  public:
    static CombatManager* GetInstance() {
      if (instance == NULL)
	instance = new CombatManager();
      return instance;
    }

    bool BTPGarden(Player* player);
    bool NeteaseFarm(Player* player);
    bool InstanceZone(Player* player);
  };
}
